package com.aoyama.satoken.app.controller;

import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@RestController
@RequestMapping("/user/")
public class UserController {

    // 测试登录，浏览器访问： http://localhost:8081/user/doLogin?username=zhang&password=123456
    @RequestMapping("doLogin")
    public String doLogin(String username, String password) {
        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if ("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            return "登录成功";
        }
        if ("lisi".equals(username) && "123456".equals(password)) {
            StpUtil.login(10002);
            return "登录成功1";
        }
        return "登录失败";
    }

    // 查询登录状态  ---- http://localhost:8081/acc/isLogin
    @RequestMapping("isLogin")
    public SaResult isLogin() {
        return SaResult.ok("是否登录：" + StpUtil.isLogin());
    }

    // 查询 Token 信息  ---- http://localhost:8081/acc/tokenInfo
    @RequestMapping("tokenInfo")
    public SaResult tokenInfo() {
        SaSession session = StpUtil.getSession();
        return SaResult.data(StpUtil.getTokenInfo());
    }

    // 测试注销  ---- http://localhost:8081/acc/logout
    @RequestMapping("logout")
    public SaResult logout() {
        StpUtil.logout();
        return SaResult.ok();
    }

    // 测试注销  ---- http://localhost:8071/user/checkTest

    /**
     * @{link StpInterfaceImpl} 中添加了数据
     * @return
     */
    @RequestMapping("checkTest")
    public SaResult checkTest() {

        // 获取：当前账号所拥有的角色集合
        List<String> roleList = StpUtil.getRoleList();
        System.out.println(roleList);
        roleList.forEach(System.out::println);

        // 判断：当前账号是否拥有指定角色, 返回 true 或 false
        boolean role = StpUtil.hasRole("super-admin");
        System.out.println("hasRole: " + role);

        // 校验：当前账号是否含有指定角色标识, 如果验证未通过，则抛出异常: NotRoleException
        StpUtil.checkRole("super-admin");

        // 校验：当前账号是否含有指定角色标识 [指定多个，必须全部验证通过]
        StpUtil.checkRoleAnd("super-admin", "shop-admin");

        // 校验：当前账号是否含有指定角色标识 [指定多个，只要其一验证通过即可]
        StpUtil.checkRoleOr("super-admin", "shop-admin");


        // 获取：当前账号所拥有的权限集合
        StpUtil.getPermissionList();

// 判断：当前账号是否含有指定权限, 返回 true 或 false
        System.out.println(StpUtil.hasPermission("user.add"));

// 校验：当前账号是否含有指定权限, 如果验证未通过，则抛出异常: NotPermissionException
        StpUtil.checkPermission("user.add");

// 校验：当前账号是否含有指定权限 [指定多个，必须全部验证通过]
        StpUtil.checkPermissionAnd("user.add", "user.delete", "user.get");

// 校验：当前账号是否含有指定权限 [指定多个，只要其一验证通过即可]
        StpUtil.checkPermissionOr("user.add", "user.delete", "user.get");


//        StpUtil.logout();
        return SaResult.ok();
    }

}
